package com.itheima.config;

import cn.itcast.pojo.Country;
import cn.itcast.pojo.Province;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 引入第三方组件的配置类
 */
@Configuration
public class CommonConfig {

    /**
     * 注册Country对象，在IOC容器中的对象名称就是方法名
     *
     * @return
     */
    // 如果配置文件中配置了指定的信息，则注入，否则不注入（如果只是指定了部分字段也不注入）
    @ConditionalOnProperty(prefix = "country", name = {"name", "system"})
    @Bean
    public Country country(@Value("${country.name}") String name, @Value("${country.system}") String system) {
        Country country = new Country();
//        country.setName("China");
//        country.setSystem("socialism");
        country.setName(name);
        country.setSystem(system);
        return country;
    }

    /**
     * 注册Province对象，在IOC容器中的对象名称就是方法名，也可以在@Bean注解中指定对象名称
     * 如果方法的内部需要使用到IOC容器管理的bean对象，或者一个需要IOC容器管理的bean对象依赖另一个IOC容器管理的bean对象，可以将被依赖的对象作为参数传入方法，Spring会自动注入对象
     *
     * @return
     */
//    @Bean
//    @Bean("aa")
//    public Province province(Country country) {
//        System.out.println("Province中使用的Country：" + country);
//        return new Province();
//    }

    // 如果IOC容器中不存在的Country，则注入Province，否则不注入
//    @ConditionalOnMissingBean(Country.class)
    // 如果当前环境中存在DispatcherServlet类，则注入Province，否则不注入
    // 如果当前引入了web起步依赖，则环境中有DispatcherServlet，否则没有
    @ConditionalOnClass(name = "org.springframework.web.servlet.DispatcherServlet")
    @Bean
    public Province province() {
        return new Province();
    }
}
